Swift 从零开始 05_if let 与 guard

Swift控制流: 如何理解 if let 与guard?

if let 和 guard 只是语法糖,没有也可以,但有了可以使得代码更简洁方便。要理解 if let 和 guard,不妨设想假如没有这两者,代码会怎么写。

if let

1
2
3
4
5
6
7
8
func doSomething(str: String?)
{
let v: String! = str
if v != nil
{
// use v to do something
}
}

Swift 中因为有optional, 经常需要判断是否为空。假如没有if let,大致写成上面的样子,有了 if let, 可以改写成:

1
2
3
4
5
6
7
func doSomething(str: String?)
{
if let v = str
{
// use v to do something
}
}

上面两段代码的控制流是一样的。对照着,可以看出if let的写法更加简洁方便。


guard

假如 if 中出现的代码很长,我们写代码时可以将错误情况先返回。比如:

1
2
3
4
5
6
7
8
9
10
func doSomething(str: String?)
{
let v: String! = str
if v == nil
{
return
}
// use v to do something
}

这样做可以避免过多的嵌套。上面代码实在太常见了,swift也提供一个guard这个语法糖,用guard可以改写成:

1
2
3
4
5
6
func doSomething(str: String?)
{
guard let v = str else { return }
// use v to do something
}

上面两段代码的控制流是一样的。也可以看出guard的写法更加简洁方便。

if满足条件需要return时就可以用guard,所有guard使用场景都可以用if来替代。为啥后来特意加了guard特性,那就是guard的可读性强